import axios from 'axios'
import { ElMessage } from 'element-plus'
import { useAuthStore } from '@/store/auth'

// 创建axios实例
const instance = axios.create({
  baseURL: '/api',
  timeout: 10000
})

// 请求拦截器
instance.interceptors.request.use(
  config => {
    const authStore = useAuthStore()
    if (authStore.token) {
      config.headers['Authorization'] = `Bearer ${authStore.token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  response => {
    // 检查是否有警告信息，但不阻止正常响应
    if (response.data && response.data.warning) {
      console.warn('API警告:', response.data.warning)
    }
    
    // 添加调试日志
    console.log('API响应成功:', response.config.url, response.data)
    
    return response.data
  },
  error => {
    console.error('API响应错误:', error)
    
    const { response } = error
    if (response) {
      console.error('错误详情:', response.status, response.data)
      
      // 处理401错误（未授权）
      if (response.status === 401) {
        const authStore = useAuthStore()
        authStore.logout()
        window.location.href = '/login'
        return Promise.reject(error)
      }
      
      // 处理403错误（禁止访问）
      if (response.status === 403) {
        // 检查是否是通知相关的接口
        const isNotificationApi = error.config.url.includes('/notifications') || 
                                error.config.url.includes('/notification')
        if (isNotificationApi) {
          // 对于通知相关的403错误，不显示错误消息
          return Promise.reject(error)
        }
      }
      
      // 特殊处理：如果是邮件发送失败但数据已保存的情况
      if (response.data && response.data.message && 
          response.data.message.includes('邮件发送失败') && 
          response.data.requestId) {
        // 不显示错误消息，让调用方处理
        return Promise.reject(error)
      }
      
      // 显示错误信息
      const errorMessage = response.data?.message || '请求失败，请稍后再试'
      ElMessage.error(errorMessage)
    } else {
      console.error('网络错误，无响应对象')
      ElMessage.error('网络连接失败，请检查您的网络')
    }
    return Promise.reject(error)
  }
)

export default instance 